/******************************************************************
文件名	：font.h
功能 	：font.c对应的头文件
版本	：1.0
时间	：2017.10.19
作者	：王理洁
联系方式：wanglijie201710@163.com
******************************************************************/


#ifndef _FONT_H_
#define _FONT_H_


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>


#define	FONT_INFO_SIZE	4    	//单个字符对应的字体检索信息长度为 4Byte  (b0~b25: 记录点阵信息的起始地址, b26~b31: 记录当前字符的象素宽度)
#define PIXE_PER_BYTE	8		//每byte 8 个像素

typedef unsigned char	u8;
typedef unsigned short  u16;
typedef unsigned int 	u32;

typedef struct tagFlSectionInfo	//字库段（section）信息结构体  8 byte  在文件头（16 byte）之后
{		
    u16  first; 				//2 byte 该段（section）中第一个字符的编码       
    u16  last;         			//2 byte 该段（section）中最后一个字符的编码
    u32  offaddr;     			//4 byte 该段（section）在整个字库文件中的地址偏移量
 }__attribute__((packed))  FL_SECTION_INF, *pFL_SECTION_INF;

typedef struct tagFontLibHeader	//unicode 字库文件头结构体  16 byte 在文件最前面
{
    u8		tag[4];    			//4 byte  'U'(or ’M’), 'F', 'L', X---Unicode(or MBCS) Font Library, X: 表示版本号. 分高低4位。如 0x12表示 Ver 1.2
    u32 	size;        		//4 byte  该库文件的总大小    
    u8   	section_count; 		//1 byte 共分几段数据，主要针对 UNICODE 编码有效。
    u8    	height;      		//1 byte 字符高度，单位：像素           
    u16    	codepage_flag;    	//2 byte 选择的字符集标志位(codepageflag):  bit0~bit13 每个bit分别代表一个字符集（CodePage） 标志，如果是1，则表示当前CodePage 被选定，否则为非选定。
    u8    	reserved[4];      	//4 byte 预留字节 00 00 00 00    
    FL_SECTION_INF  *psection;	//指向段（section）信息结构体的指针(自已增加的内容，因为是指针，所以占4 byte)
}__attribute__((packed))  FL_HEADER, *pFL_HEADER;




FILE* 	open_font_file(const char *font_file_name);
u32		read_fl_header(pFL_HEADER fd_header, FILE *fd_fl);
u32 	read_char_info(u16 char_code, pFL_HEADER fl_header, FILE *fd_fl);
int 	read_char_dot_matix(u32 char_info, u8* buf,pFL_HEADER fl_header, FILE *fd_fl);
u32* 	utf8_to_unicode(char *utf8);







#endif


